import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';

import 'main.dart';

class RandomWordsState extends State<RandomWords>{
  @override

  final List<WordPair> _suggestions = <WordPair>[];
  final Set<WordPair> _saved = new Set<WordPair>();
  final TextStyle _biggerFont = const TextStyle(fontSize: 18.0);

  Widget build(BuildContext context) {
    // final WordPair wordPair = new WordPair.random();
    // return new Text(wordPair.asPascalCase);
    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Startup Namr Generator'),
          actions: <Widget>[
            new IconButton(icon: const Icon(Icons.list), onPressed: _pushSaved)
          ],
        ),
        body: _buildSuggestions(),
    );
  }
  //  构建显示建议单词对的 ListView
  Widget _buildSuggestions(){
    return new ListView.builder(
      padding: const EdgeInsets.all(16.0),
    //  对于每个建议的单词对都会调用一次 itemBuilder
    //  然后将单词添加到 ListTile 行中
    //  在偶数行，改函数会对单词添加一个 ListTile row
    //  在奇数行，该函数会添加一个分割线的 widget，来分割相邻的词对
    //  注意，在小屏幕上，分割线看起来可能比较吃力？。
      itemBuilder: (BuildContext _context,int i){
      //  在每一列之前，添加一个 1 像素高的分割线widget
        if (i.isOdd) {
          return new Divider();
        }
      //  语法 “i ~/ 2”表示 i 除以2，但返回值是整型（向下取整）
      //  比如 i 为：1,2,3,4,5 时，结果为 0,1,1,2,2
      //  这可以计算出 ListView 中减去分割线后的实际单词对数量
        final int index = i ~/ 2;
      //  如果是建议列表中最后一个单词对
        if (index >= _suggestions.length) {
        //  …接着再生成 10 个单词对，然后添加到建议列表
          _suggestions.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_suggestions[index]);
      },
    );
  }
  //  对于每一个单词对，_buildSuggestions 函数都会调用一次 _buildRow。这个函数在 ListTile 中显示每个新词对
  Widget _buildRow(WordPair pair){
      // 添加 alreadysaved 来检查确保单词对还没添加到收藏夹
    final bool alreadySaved = _saved.contains(pair);
      return new ListTile(
        title: new Text(
          pair.asPascalCase,
          style: _biggerFont,
        ),
        trailing: new Icon(
          alreadySaved ? Icons.favorite : Icons.favorite_border,
          color: alreadySaved ? Colors.red : null,
        ),
      //    事件
      onTap: () {
        setState(() {
          if (alreadySaved) {
            _saved.remove(pair);
          } else {
            _saved.add(pair);
          }
        });
      },
      );
  }
  //   收藏夹路由
  void _pushSaved(){
    Navigator.of(context).push(
      new MaterialPageRoute<void>(
          builder: (BuildContext context){
            final Iterable<ListTile> tiles = _saved.map(
                (WordPair pair){
                  return new ListTile(
                    title: new Text(
                      pair.asPascalCase,
                      style: _biggerFont,
                    ),
                  );
                },
            );
            final List<Widget> divided = ListTile
                .divideTiles(
              context: context,
              tiles: tiles,
            )
            .toList();
            return new Scaffold(
              appBar: new AppBar(
                title: const Text('save Suggestions'),
              ),
              body: new ListView(children: divided),
            );
          },
      ),
    );
  }
}